/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package RRHH_controlador;

import CONTABILIDAD_MODELO.CON_DATOS_EMPRESA;
import Conexion.Conexion;
import RRHH_Modelo.RHH_CANTIDAD_AGUINALDOS_PROVI;
import RRHH_Modelo.RHH_DEPARTAMENTO;
import RRHH_Modelo.RHH_EVENTOS_HITO;
import RRHH_Modelo.RHH_FECHAS_HITO;
import RRHH_Modelo.RHH_PERSONA;
import RRHH_Modelo.RHH_PLANILLA_EMPLEADOS;
import RRHH_Modelo.RHH_PLANILLA_PROVISION_AGUINAL;
import RRHH_Modelo.RHH_PLANILLA_PROV_AGUINAL_CABE;
import RRHH_Modelo.RHH_PLANILLA_RETROACTIVOS;
import RRHH_Modelo.RHH_PLANILLA_RETROACTIVO_CABE;
import RRHH_Modelo.RHH_REGIONAL;
import RRHH_Modelo.RHH_SUCURSAL;
import RRHH_Modelo.RHH_USUARIO;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author equipo_4
 */
@WebServlet(name = "RRHH_PLANILLA_PROVISION_AGUINALDOS_CONTROLLER", urlPatterns = {"/RRHH_PLANILLA_PROVISION_AGUINALDOS_CONTROLLER"})
public class RRHH_PLANILLA_PROVISION_AGUINALDOS_CONTROLLER extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet RRHH_PLANILLA_FINIQUITOS_CONTROLLER</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet RRHH_PLANILLA_FINIQUITOS_CONTROLLER at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            RHH_USUARIO usuario = ((RHH_USUARIO) request.getSession().getAttribute("usr"));
            Conexion con = new Conexion(usuario.getUSUARIO(), usuario.getPASSWORD());
            String evento = request.getParameter("evento");
            String html = "";

            switch (evento) {
                case "cargar":
                    html = cargar(request, con);
                    break;
                case "estado":
                    html = estado(request, con);
                    break;
                case "mostrar":
                    html = mostrar(request, con);
                    break;
                case "cerrar":
                    html = cerrar(request, con);
                    break;
                case "calcular_fila":
                    html = calcular_fila(request, con);
                    break;
                case "cant_prov":
                    html = cant_prov(request, con);
                    break;
                case "cantidad_aguinaldo":
                    html = cantidad_aguinaldo(request, con);
                    break;
            }
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/plain");
            response.getWriter().write(html);
            con.Close();
        } catch (SQLException ex) {
            Logger.getLogger(RRHH_PLANILLA_PROVISION_AGUINALDOS_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private String cargar(HttpServletRequest request, Conexion con) throws SQLException {
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        String html = "";
        RHH_CANTIDAD_AGUINALDOS_PROVI cap = new RHH_CANTIDAD_AGUINALDOS_PROVI(con).Buscar(ano);
        if(cap!=null)
        {                                    
            RHH_PLANILLA_PROV_AGUINAL_CABE prov_cabe = new RHH_PLANILLA_PROV_AGUINAL_CABE(con).Buscar(ano, mes);
            int id_prov_cabe=0;
            RHH_PLANILLA_PROVISION_AGUINAL prov = new RHH_PLANILLA_PROVISION_AGUINAL(con);            
            if(prov_cabe!=null)
            {
                id_prov_cabe=prov_cabe.getID();
                prov.Eliminar(prov_cabe.getID());
            }
            else
            {
                prov_cabe = new RHH_PLANILLA_PROV_AGUINAL_CABE(0, 1, ano, mes);
                prov_cabe.setCon(con);
                id_prov_cabe=prov_cabe.Insertar();
            }
                        
            html += "<thead>";
            html += "<tr>";
            html += "<th rowspan='2'>CI</th>";
            html += "<th rowspan='2'>LUGAR DE EMISION</th>";
            html += "<th rowspan='2'>NOMBRES</th>";
            html += "<th rowspan='2'>APELLIDO PATERNO</th>";
            html += "<th rowspan='2'>APELLIDO MATERNO</th>";
            html += "<th rowspan='2'>FECHA CONTRATACION</th>";
            html += "<th rowspan='2'>FECHA RETIRO</th>";
            html += "<th colspan='3'>ANTIGUEDAD</th>";
            html += "<th rowspan='2'>CARGO</th>";
            html += "<th rowspan='2'>DEPARTAMENTO</th>";
            html += "<th rowspan='2'>REGIONAL</th>";
            html += "<th rowspan='2'>SUCURSAL</th>";
            html += "<th rowspan='2'>MESES TRABAJADOS AÑO ACTUAL</th>";
            html += "<th rowspan='2'>DIAS TRABAJADOS AÑO ACTUAL</th>";
            html += "<th rowspan='2'>SALARIO MES 1</th>";
            html += "<th rowspan='2'>SALARIO MES 2</th>";
            html += "<th rowspan='2'>SALARIO MES 3</th>";
            html += "<th rowspan='2'>TOTAL</th>";
            html += "<th rowspan='2'>PROMEDIO 3 SALARIOS</th>";
            html += "<th rowspan='2'>MONTO A PROVICIONAR</th>";
            html += "<th rowspan='2'>MONTO RETROACTIVO</th>";
            html += "<th rowspan='2'>TOTAL MONTO A PROVICIONAR</th>";
            html += "</tr>";
            html += "<tr>";
            html += "<th>DIA</th>";
            html += "<th>MES</th>";
            html += "<th>AÑO</th>";
            html += "</tr>";
            html += "</thead>";
            html += "<tbody>";
            List<RHH_USUARIO> lista = new RHH_USUARIO(con).Todos_Activos_Incluyendo_Despedidos_Este_Mes(ano, mes);
            for (RHH_USUARIO usr : lista) {
                String consulta = "SELECT RHH_PERSONA.CI,\n"
                        + "       RHH_PERSONA.LUGAR_EMISION,\n"
                        + "       RHH_PERSONA.PRIMER_NOMBRE,\n"
                        + "       RHH_PERSONA.SEGUNDO_NOMBRE,\n"
                        + "       RHH_PERSONA.PRIMER_APELLIDO,\n"
                        + "       RHH_PERSONA.SEGUNDO_APELLIDO,\n"
                        + "       RHH_DEPARTAMENTO.ID AS DEPTO,\n"
                        + "       RHH_REGIONAL.ID AS REGIONAL,\n"
                        + "       RHH_SUCURSAL.ID AS SUCURSAL,\n"
                        + "       RHH_CARGO.DESCRIPCION AS CARGO,\n"
                        + "       RHH_USUARIO.ID\n"
                        + "  FROM BROKER.RHH_USUARIO,\n"
                        + "       BROKER.RHH_CARGO,\n"
                        + "       BROKER.RHH_CARGO_DEP_REG_SUC,\n"
                        + "       BROKER.RHH_DEPARTAMENTO,\n"
                        + "       BROKER.RHH_REGIONAL,\n"
                        + "       BROKER.RHH_SUCURSAL,\n"
                        + "       BROKER.RHH_PERSONA\n"
                        + " WHERE     (RHH_USUARIO.ID_CARGO = RHH_CARGO.ID)\n"
                        + "       AND (RHH_CARGO_DEP_REG_SUC.ID_CARGO = RHH_CARGO.ID)\n"
                        + "       AND (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID)\n"
                        + "       AND (RHH_CARGO_DEP_REG_SUC.ID_DEPTO = RHH_DEPARTAMENTO.ID(+))\n"
                        + "       AND (RHH_CARGO_DEP_REG_SUC.ID_REGIONAL = RHH_REGIONAL.ID(+))\n"
                        + "       AND (RHH_CARGO_DEP_REG_SUC.ID_SUCURSAL = RHH_SUCURSAL.ID(+))\n"
                        + "       AND (RHH_USUARIO.ID = " + usr.getID() + ")";
                ResultSet rs = con.EjecutarConsulta(consulta);

                if (rs.next()) {
                    RHH_PLANILLA_PROVISION_AGUINAL planilla = new RHH_PLANILLA_PROVISION_AGUINAL(con);
                    planilla.setID_CABECERA_AGUINAL(id_prov_cabe);
                    
                    RHH_FECHAS_HITO fecha_hito = new RHH_FECHAS_HITO(con).BuscarxUsuarioEvento(3, usr.getID());
                    Date ingreso = fecha_hito.getFECHAinDate();

                    Calendar calendario = new GregorianCalendar();
                    calendario.set(Calendar.YEAR, 0);
                    calendario.set(Calendar.MONTH, 0);
                    calendario.set(Calendar.DAY_OF_MONTH, 1);

                    int anof = 0;
                    int mesf = 0;
                    int diaf = 0;

                    int dias_trabajados = 0;
                    if (ingreso != null) {
                        Date fecha1 = ingreso;
                        Calendar fecha_actual = new GregorianCalendar();                        
                        Date fecha2 = fecha_actual.getTime();
                        long diferencia = fecha2.getTime() - fecha1.getTime();
                        int dia = (int) (diferencia / (3600000 * 24));
                        dias_trabajados = dia;
                        calendario.add(Calendar.DAY_OF_MONTH, dia);
                        if (dia < 365) {
                            anof = 0;
                        } else {
                            anof = calendario.get(Calendar.YEAR);
                        }

                        mesf = calendario.get(Calendar.MONTH);
                        diaf = calendario.get(Calendar.DAY_OF_MONTH);
                    }

                    Calendar fecha_in = new GregorianCalendar();
                    fecha_in.setTime(ingreso);
                    RHH_FECHAS_HITO despido = new RHH_FECHAS_HITO(con).retiro(usr.getID());
                    Calendar calcular_ini = new GregorianCalendar();
                    if (fecha_in.get(Calendar.YEAR) < ano) 
                    {                                            
                        calcular_ini.set(Calendar.YEAR, ano);
                        calcular_ini.set(Calendar.MONTH, 0);
                        calcular_ini.set(Calendar.DAY_OF_MONTH, 1);                        
                    }
                    else 
                    {                        
                        calcular_ini.set(Calendar.YEAR, ano);
                        calcular_ini.set(Calendar.MONTH, fecha_in.get(Calendar.MONTH));
                        calcular_ini.set(Calendar.DAY_OF_MONTH, fecha_in.get(Calendar.DAY_OF_MONTH));                     
                    }

                    if (dias_trabajados >= 90) {
                        planilla.setID_USUARIO(usr.getID());
                        html += "<tr>";
                        html += "<td>" + rs.getString("CI") + "</td>";
                        html += "<td>" + rs.getString("LUGAR_EMISION") + "</td>";
                        String primer_nombre = rs.getString("PRIMER_NOMBRE");
                        String segundo_nombre = rs.getString("SEGUNDO_NOMBRE");
                        primer_nombre = primer_nombre == null ? "" : primer_nombre;
                        segundo_nombre = segundo_nombre == null ? "" : segundo_nombre;
                        html += "<td>" + primer_nombre + " " + segundo_nombre + "</td>";
                        String primer_apellido = rs.getString("PRIMER_APELLIDO");
                        primer_apellido = primer_apellido == null ? "" : primer_apellido;
                        html += "<td>" + primer_apellido + "</td>";
                        String segundo_apellido = rs.getString("SEGUNDO_APELLIDO");
                        segundo_apellido = segundo_apellido == null ? "" : segundo_apellido;
                        html += "<td>" + segundo_apellido + "</td>";

                        if (fecha_hito != null) {
                            html += "<td>" + fecha_hito.getFECHA() + "</td>";
                            planilla.setFECHA_INGRESO(ingreso);
                        } else {
                            html += "<td></td>";
                        }


                        int dias_trabajados_mes_actual = 0;

                        fecha_hito = new RHH_FECHAS_HITO(con).retiro(usr.getID());
                        if (fecha_hito != null) {
                            html += "<td>" + fecha_hito.getFECHA() + "</td>";
                            planilla.setFECHA_RETIRO(fecha_hito.getFECHAinDate());
                            Calendar cal = new GregorianCalendar();
                            cal.setTime(fecha_hito.getFECHAinDate());
                            dias_trabajados_mes_actual = cal.get(Calendar.DAY_OF_MONTH);
                        } else {
                            html += "<td></td>";
                        }

                        html += "<td>" + diaf + "</td>";
                        planilla.setANTIGUEDAD_DIA(diaf);
                        html += "<td>" + mesf + "</td>";
                        planilla.setANTIGUEDAD_MES(mesf);
                        html += "<td>" + anof + "</td>";
                        planilla.setANTIGUEDAD_ANO(anof);

                        String cargo = rs.getString("CARGO");
                        cargo = cargo == null ? "" : cargo;
                        html += "<td>" + cargo + "</td>";
                        planilla.setCARGO(cargo);
                        
                        int depto = rs.getInt("DEPTO");
                        String departamento="***";
                        if(depto!=0)
                            departamento = new RHH_DEPARTAMENTO(con).BuscarXid(depto).getDESCRIPCION();
                        
                        html += "<td>" + departamento + "</td>";
                        planilla.setDEPARTAMENTO(depto);
                                                
                        int regional = rs.getInt("REGIONAL");
                        String reg = "***";
                        if(regional!=0)
                            reg=new RHH_REGIONAL(con).BuscarXid(regional).getDESCRIPCION();                        
                        html += "<td>" + reg + "</td>";
                        planilla.setREGIONAL(regional);
                        
                        int sucursal = rs.getInt("SUCURSAL");
                        String suc = "***";
                        if(sucursal!=0)
                            suc = new RHH_SUCURSAL(con).BuscarXid(sucursal).getDESCRIPCION();
                        html += "<td>" + suc + "</td>";
                        planilla.setSUCURSAL(sucursal);
                                                
                        Calendar calcular_fin = new GregorianCalendar();
                        calcular_fin.set(Calendar.YEAR, ano);
                        calcular_fin.set(Calendar.MONTH, mes-1);
                        calcular_fin.set(Calendar.DAY_OF_MONTH, calcular_fin.getActualMaximum(Calendar.DAY_OF_MONTH));
                        
                        Calendar tiempo_tabajado = new GregorianCalendar();
                        tiempo_tabajado.set(Calendar.YEAR, 0);
                        tiempo_tabajado.set(Calendar.MONTH, 0);
                        tiempo_tabajado.set(Calendar.DAY_OF_MONTH, 1);
                        
                        long tiempo = calcular_fin.getTimeInMillis() - calcular_ini.getTimeInMillis();
                        
                        int dia = (int) (tiempo / (3600000 * 24));

                        tiempo_tabajado.add(Calendar.DAY_OF_MONTH, dia);
                        int meses_trabajados = tiempo_tabajado.get(Calendar.MONTH);
                        int dias_trabajado = tiempo_tabajado.get(Calendar.DAY_OF_MONTH);
                        
                        if(despido!=null)
                        {
                            Calendar cal = new GregorianCalendar();
                            cal.setTime(despido.getFECHAinDate());
                            dias_trabajado = cal.get(Calendar.DAY_OF_MONTH);
                        }
                        
                        html += "<td>" + meses_trabajados + "</td>";
                        planilla.setMESES_TRABAJADOS_ANO_ACTUAL(meses_trabajados);
                        html += "<td>" + dias_trabajado + "</td>";
                        planilla.setDIAS_TRABAJADOS_ANO_ACTUAL(dias_trabajado);

                        Calendar fecha_planilla = new GregorianCalendar();
                        fecha_planilla.set(Calendar.YEAR, ano);
                        fecha_planilla.set(Calendar.MONTH, mes);

                        fecha_planilla.add(Calendar.MONTH, -3);

                        double salario1 = 0.0;
                        double salario2 = 0.0;
                        double salario3 = 0.0;

                        RHH_PLANILLA_EMPLEADOS planilla_empleados = new RHH_PLANILLA_EMPLEADOS(con).BuscarCerradaxUSUARIO(fecha_planilla.get(Calendar.YEAR), (fecha_planilla.get(Calendar.MONTH)+1), usr.getID());

                        if (planilla_empleados != null) {
                            salario1 = planilla_empleados.getTOTAL_GANADO();
                        }

                        fecha_planilla.add(Calendar.MONTH, 1);
                        planilla_empleados = new RHH_PLANILLA_EMPLEADOS(con).BuscarCerradaxUSUARIO(fecha_planilla.get(Calendar.YEAR), fecha_planilla.get(Calendar.MONTH)+1, usr.getID());

                        if (planilla_empleados != null) {
                            salario2 = planilla_empleados.getTOTAL_GANADO();
                        }

                        fecha_planilla.add(Calendar.MONTH, 1);
                        planilla_empleados = new RHH_PLANILLA_EMPLEADOS(con).BuscarCerradaxUSUARIO(fecha_planilla.get(Calendar.YEAR), fecha_planilla.get(Calendar.MONTH)+1, usr.getID());

                        if (planilla_empleados != null) {
                            salario3 = planilla_empleados.getTOTAL_GANADO();
                        }

                        html += "<td>" + salario1 + "</td>";
                        planilla.setSALARIO_MES_UNO(salario1);
                        html += "<td>" + salario2 + "</td>";
                        planilla.setSALARIO_MES_DOS(salario2);
                        html += "<td>" + salario3 + "</td>";
                        planilla.setSALARIO_MES_TRES(salario3);
                        double total = (salario3 + salario2 + salario1);
                        html += "<td>" + (total) + "</td>";
                        planilla.setTOTAL(total);
                        double promedio = total / 3;
                        html += "<td>" + (promedio) + "</td>";
                        planilla.setPROMEDIO_SALARIOS(promedio);

                        if (dias_trabajados_mes_actual == 0) {
                            Calendar cal = new GregorianCalendar();
                            dias_trabajados_mes_actual = cal.get(Calendar.DAY_OF_MONTH);
                        }
                        int dias_ano_comercial = new CON_DATOS_EMPRESA(con).Buscar().getANO_COMERCIAL();
                        double monto_a_provisionar = (promedio * dias_trabajados_mes_actual) / dias_ano_comercial;
                        
                        int cantidad_agui = new RHH_CANTIDAD_AGUINALDOS_PROVI(con).Buscar(ano).getCANTIDAD();
                        monto_a_provisionar=monto_a_provisionar*cantidad_agui;
                        html += "<td>" + monto_a_provisionar + "</td>";
                        planilla.setMONTO_PROVISIONAR(monto_a_provisionar);

                        double monto_retro_activo = 0.0;
                        int id_cabe=0;
                        RHH_PLANILLA_RETROACTIVO_CABE cabe1 = new RHH_PLANILLA_RETROACTIVO_CABE(con).Buscar(ano,mes);
                        if(cabe1!=null)
                            id_cabe=cabe1.getID();
                        RHH_PLANILLA_RETROACTIVOS retro = new RHH_PLANILLA_RETROACTIVOS(con).Buscar(id_cabe, usr.getID());

                        if (retro != null) {
                            double total_ganado = retro.getTOTAL_GANADO();
                            double dias_trabajados_retroactivo = retro.getDIAS_TRABAJADOS();
                            monto_retro_activo = ((total_ganado * dias_trabajados_retroactivo) / dias_ano_comercial) / 3;
                        }

                        html += "<td><input type='number' value='" + monto_retro_activo + "' onblur='calcular_fila(this," + mes + "," + ano + "," + usr.getID() + ");' /></td>";
                        planilla.setMONTO_RETROACTIVO(monto_retro_activo);
                        double total_monto_a_provicionar = (monto_a_provisionar + monto_retro_activo)*cap.getCANTIDAD();
                        html += "<td>" + total_monto_a_provicionar + "</td>";
                        planilla.setTOTAL_MONTO_PROVISIONAR(total_monto_a_provicionar);

                        planilla.Insertar();
                        html += "</tr>";
                    }
                }
            }
            html += "</tbody>";
        }
        else
        {
            html="-1";
        }
        return html;

    }

    private String calcular_fila(HttpServletRequest request, Conexion con) throws SQLException {
        int id_usr = Integer.parseInt(request.getParameter("id_usr"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        int ano = Integer.parseInt(request.getParameter("ano"));
        double monto_retro = Double.parseDouble(request.getParameter("monto_retro"));
        String html = "";

        RHH_PERSONA per = new RHH_PERSONA(con).BuscarxID_Usuario(id_usr);
        List<RHH_EVENTOS_HITO> evento_list = new RHH_EVENTOS_HITO(con).TodosRetiro();
        RHH_PLANILLA_PROV_AGUINAL_CABE cabe = new RHH_PLANILLA_PROV_AGUINAL_CABE(con).Buscar(ano, mes);
        RHH_PLANILLA_PROVISION_AGUINAL planilla = new RHH_PLANILLA_PROVISION_AGUINAL(con).Buscarxcabe(cabe.getID(), id_usr);
        if (planilla != null) {
            html += "<td>" + per.getCI() + "</td>";
            html += "<td>" + per.getLUGAR_EMISION() + "</td>";
            html += "<td>" + per.getPRIMER_NOMBRE() + " " + per.getSEGUNDO_NOMBRE() + "</td>";
            html += "<td>" + per.getPRIMER_APELLIDO() + "</td>";
            html += "<td>" + per.getSEGUNDO_APELLIDO() + "</td>";
            html += "<td>" + planilla.getFECHA_INGRESO() + "</td>";
            if (planilla.getFECHA_RETIRO() != null) {
                html += "<td>" + planilla.getFECHA_RETIRO() + "</td>";
            } else {
                html += "<td></td>";
            }
            html += "<td>" + planilla.getANTIGUEDAD_DIA() + "</td>";
            html += "<td>" + planilla.getANTIGUEDAD_MES() + "</td>";
            html += "<td>" + planilla.getANTIGUEDAD_ANO() + "</td>";
            html += "<td>" + planilla.getCARGO() + "</td>";
            html += "<td>" + planilla.getDEPARTAMENTO() + "</td>";
            html += "<td>" + planilla.getREGIONAL() + "</td>";
            html += "<td>" + planilla.getSUCURSAL() + "</td>";
            html += "<td>" + planilla.getMESES_TRABAJADOS_ANO_ACTUAL() + "</td>";
            html += "<td>" + planilla.getDIAS_TRABAJADOS_ANO_ACTUAL() + "</td>";
            html += "<td>" + planilla.getSALARIO_MES_UNO() + "</td>";
            html += "<td>" + planilla.getSALARIO_MES_DOS() + "</td>";
            html += "<td>" + planilla.getSALARIO_MES_TRES() + "</td>";
            html += "<td>" + planilla.getTOTAL() + "</td>";
            html += "<td>" + planilla.getPROMEDIO_SALARIOS() + "</td>";
            double monto_provicionar = planilla.getMONTO_PROVISIONAR();
            html += "<td>" + monto_provicionar + "</td>";
            html += "<td><input type='number' value='" + monto_retro + "' onblur='calcular_fila(this," + mes + "," + ano + "," + id_usr + ");' /></td>";
            planilla.setMONTO_RETROACTIVO(monto_retro);
            RHH_CANTIDAD_AGUINALDOS_PROVI cap = new RHH_CANTIDAD_AGUINALDOS_PROVI(con).Buscar(ano);
            double total_monto_provisionar = (monto_provicionar+monto_retro)*cap.getCANTIDAD();
            html += "<td>" + total_monto_provisionar+ "</td>";
            planilla.setTOTAL_MONTO_PROVISIONAR(total_monto_provisionar);
            planilla.Modificar();
        }
        return html;
    }

    private String mostrar(HttpServletRequest request, Conexion con) throws SQLException {
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"));

        RHH_PLANILLA_PROV_AGUINAL_CABE cabe = new RHH_PLANILLA_PROV_AGUINAL_CABE(con).Buscar(ano, mes);
        List<RHH_PLANILLA_PROVISION_AGUINAL> lista = new RHH_PLANILLA_PROVISION_AGUINAL(con).BuscarXcabecera(cabe.getID());
        String html = "";
        html += "<thead>";
        html += "<tr>";
        html += "<th rowspan='2'>CI</th>";
        html += "<th rowspan='2'>LUGAR DE EMISION</th>";
        html += "<th rowspan='2'>NOMBRES</th>";
        html += "<th rowspan='2'>APELLIDO PATERNO</th>";
        html += "<th rowspan='2'>APELLIDO MATERNO</th>";
        html += "<th rowspan='2'>FECHA CONTRATACION</th>";
        html += "<th rowspan='2'>FECHA RETIRO</th>";
        html += "<th colspan='3'>ANTIGUEDAD</th>";
        html += "<th rowspan='2'>CARGO</th>";
        html += "<th rowspan='2'>DEPARTAMENTO</th>";
        html += "<th rowspan='2'>REGIONAL</th>";
        html += "<th rowspan='2'>SUCURSAL</th>";
        html += "<th rowspan='2'>MESES TRABAJADOS AÑO ACTUAL</th>";
        html += "<th rowspan='2'>DIAS TRABAJADOS AÑO ACTUAL</th>";
        html += "<th rowspan='2'>SALARIO MES 1</th>";
        html += "<th rowspan='2'>SALARIO MES 2</th>";
        html += "<th rowspan='2'>SALARIO MES 3</th>";
        html += "<th rowspan='2'>TOTAL</th>";
        html += "<th rowspan='2'>PROMEDIO 3 SALARIOS</th>";
        html += "<th rowspan='2'>MONTO A PROVICIONAR</th>";
        html += "<th rowspan='2'>MONTO RETROACTIVO</th>";
        html += "<th rowspan='2'>TOTAL MONTO A PROVICIONAR</th>";
        html += "</tr>";
        html += "<tr>";
        html += "<th>DIA</th>";
        html += "<th>MES</th>";
        html += "<th>AÑO</th>";
        html += "</tr>";
        html += "</thead>";
        html += "<tbody>";
        for (RHH_PLANILLA_PROVISION_AGUINAL planilla : lista) {
            RHH_PERSONA per = new RHH_PERSONA(con).BuscarxID_Usuario(planilla.getID_USUARIO());
            List<RHH_EVENTOS_HITO> evento_list = new RHH_EVENTOS_HITO(con).TodosRetiro();
            html += "<tr>";
            html += "<td>" + per.getCI() + "</td>";
            html += "<td>" + per.getLUGAR_EMISION() + "</td>";
            html += "<td>" + per.getPRIMER_NOMBRE() + " " + per.getSEGUNDO_NOMBRE() + "</td>";
            html += "<td>" + per.getPRIMER_APELLIDO() + "</td>";
            html += "<td>" + per.getSEGUNDO_APELLIDO() + "</td>";
            html += "<td>" + planilla.getFECHA_INGRESO() + "</td>";
            if (planilla.getFECHA_RETIRO() != null) {
                html += "<td>" + planilla.getFECHA_RETIRO() + "</td>";
            } else {
                html += "<td></td>";
            }
            html += "<td>" + planilla.getANTIGUEDAD_DIA() + "</td>";
            html += "<td>" + planilla.getANTIGUEDAD_MES() + "</td>";
            html += "<td>" + planilla.getANTIGUEDAD_ANO() + "</td>";
            
            String cargo = planilla.getCARGO();
            cargo = cargo == null ? "" : cargo;
            html += "<td>" + cargo + "</td>";
            int depto = planilla.getDEPARTAMENTO();
            String dep ="";
            if(depto!=0)
                dep=new RHH_DEPARTAMENTO(con).BuscarXid(depto).getDESCRIPCION();            
            html += "<td>" + dep + "</td>";
            
            int regional = planilla.getREGIONAL();
            String reg="";
            if(regional!=0)
                reg=new RHH_REGIONAL(con).BuscarXid(regional).getDESCRIPCION();
            html += "<td>" + reg + "</td>";
            
            int sucursal = planilla.getSUCURSAL();
            String suc ="";
            if(sucursal!=0)
                suc=new RHH_SUCURSAL(con).BuscarXid(sucursal).getDESCRIPCION();            
            html += "<td>" + suc + "</td>";
            
            html += "<td>" + planilla.getMESES_TRABAJADOS_ANO_ACTUAL() + "</td>";
            html += "<td>" + planilla.getDIAS_TRABAJADOS_ANO_ACTUAL() + "</td>";
            html += "<td>" + planilla.getSALARIO_MES_UNO() + "</td>";
            html += "<td>" + planilla.getSALARIO_MES_DOS() + "</td>";
            html += "<td>" + planilla.getSALARIO_MES_TRES() + "</td>";
            html += "<td>" + planilla.getTOTAL() + "</td>";
            html += "<td>" + planilla.getPROMEDIO_SALARIOS() + "</td>";
            html += "<td>" + planilla.getMONTO_PROVISIONAR() + "</td>";
            html += "<td>" + planilla.getMONTO_RETROACTIVO() + "</td>";
            html += "<td>" + planilla.getTOTAL_MONTO_PROVISIONAR() + "</td>";
            html += "</tr>";
        }
        html += "</tbody>";
        return html;
    }

    private String estado(HttpServletRequest request, Conexion con) throws SQLException {
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        RHH_PLANILLA_PROV_AGUINAL_CABE planilla = new RHH_PLANILLA_PROV_AGUINAL_CABE(con).Buscar(ano, mes);
        if (planilla!=null) {
            return planilla.getESTADO() + "";
        } else {
            return "-1";
        }
    }

    private String cerrar(HttpServletRequest request, Conexion con) throws SQLException {
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        RHH_PLANILLA_PROV_AGUINAL_CABE planilla = new RHH_PLANILLA_PROV_AGUINAL_CABE(con).Buscar(ano, mes);
        if(planilla!=null)
        {
            planilla.setESTADO(0);
            planilla.Modificar();
        }
        return "true";
    }

    private String cant_prov(HttpServletRequest request, Conexion con) throws SQLException {
        int cantidad = Integer.parseInt(request.getParameter("cantidad"));
        int ano = Integer.parseInt(request.getParameter("ano"));
        
        RHH_CANTIDAD_AGUINALDOS_PROVI cap = new RHH_CANTIDAD_AGUINALDOS_PROVI(con).Buscar(ano);
        if (cap==null) 
        {
            cap = new RHH_CANTIDAD_AGUINALDOS_PROVI(ano, cantidad);
            cap.setCon(con);
            cap.Insertar();
        }
        else
        {
            cap = new RHH_CANTIDAD_AGUINALDOS_PROVI(ano, cantidad);
            cap.setCon(con);
            cap.Modificar();
        }
        
        return "";
    }

    private String cantidad_aguinaldo(HttpServletRequest request, Conexion con) throws SQLException {
        int ano = Integer.parseInt(request.getParameter("ano"));
        RHH_CANTIDAD_AGUINALDOS_PROVI cap = new RHH_CANTIDAD_AGUINALDOS_PROVI(con).Buscar(ano);
        if(cap!=null)
            return cap.getCANTIDAD()+"";
        else
            return "1";
    }
}
